#!/bin/bash
# 一键创建 512MB swap，开机自动启用，并配置 swappiness（带步骤序号显示）

# 显示 banner
echo -e "┌─────────────────────────────────────────────────┐"
echo -e "│                 SWAP 分区自动配置                 │"
echo -e "└─────────────────────────────────────────────────┘"

# 脚本功能说明
echo "本脚本将自动为系统配置 512MB swap 分区，并执行以下操作："
echo "1. 停用并删除已有 swap 分区（如果存在）"
echo "2. 创建 512MB swap 文件"
echo "3. 设置 swap 文件权限为 600"
echo "4. 格式化 swap 文件"
echo "5. 启用新创建的 swap 分区"
echo "6. 配置开机自动挂载 swap 分区"
echo "7. 设置 swappiness 参数为 10（优化系统性能）"
echo "8. 查看 swap 分区状态"
echo "9. 验证 swappiness 设置是否生效"

echo -e "\n开始执行配置...\n"

SWAPFILE=/swapfile
SWAPSIZE=512M
SWAPPINESS=10
STEP=1

echo "[${STEP}/11] 停用已有 swap（如果有）"
swapoff -a
STEP=$((STEP+1))

echo "[${STEP}/11] 删除已有 swap 文件（如果存在）"
[ -f $SWAPFILE ] && rm -f $SWAPFILE
STEP=$((STEP+1))

echo "[${STEP}/11] 创建 ${SWAPSIZE} swap 文件"
fallocate -l $SWAPSIZE $SWAPFILE 2>/dev/null || \
dd if=/dev/zero of=$SWAPFILE bs=1M count=512
STEP=$((STEP+1))

echo "[${STEP}/11] 设置权限"
chmod 600 $SWAPFILE
STEP=$((STEP+1))

echo "[${STEP}/11] 格式化 swap"
mkswap $SWAPFILE
STEP=$((STEP+1))

echo "[${STEP}/11] 启用 swap"
swapon $SWAPFILE
STEP=$((STEP+1))

echo "[${STEP}/11] 配置开机自动挂载"
grep -q "$SWAPFILE" /etc/fstab || echo "$SWAPFILE none swap sw 0 0" >> /etc/fstab
STEP=$((STEP+1))

echo "[${STEP}/11] 设置 swappiness 为 $SWAPPINESS"
# 临时生效
sysctl vm.swappiness=$SWAPPINESS

# 永久生效：如果 /etc/sysctl.conf 不存在就创建
if [ ! -f /etc/sysctl.conf ]; then
    echo "# 系统内核参数配置文件" > /etc/sysctl.conf
fi
# 覆盖或写入 vm.swappiness
grep -q "vm.swappiness" /etc/sysctl.conf && \
    sed -i "s/^vm.swappiness=.*/vm.swappiness=$SWAPPINESS/" /etc/sysctl.conf || \
    echo "vm.swappiness=$SWAPPINESS" >> /etc/sysctl.conf
STEP=$((STEP+1))

echo "[${STEP}/11] 查看当前 swap 状态"
free -h
swapon -s
STEP=$((STEP+1))

echo "[${STEP}/11] 验证 swappiness 设置是否生效"
cat /proc/sys/vm/swappiness
STEP=$((STEP+1))

echo "[${STEP}/11] 完成！系统已配置 512MB swap，开机自动启用，并设置 swappiness=$SWAPPINESS。"
